package com.yanhui.utils.string;

import java.text.NumberFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

/**
 * @Description ${END}
 * @Author yanhui
 * @Date 2018-12-16 13:37
 */
public class _numberUtils {

    public static String numberPercent(String number){
        return numberPercent(number, "100");
    }

    /**
     * 转换百分比
     * @param number
     * @param total
     * @return
     */
    public static String numberPercent(String number, String total){
        double pnumber = Double.valueOf(number);
        double ptotal = Double.valueOf(total);
        double percent = pnumber / ptotal;
        //输出一下，确认你的小数无误
        //System.out.println("小数：" + percent);
        //获取格式化对象
        NumberFormat nt = NumberFormat.getPercentInstance();
        //设置百分数精确度2即保留两位小数
        nt.setMinimumFractionDigits(2);
        //最后格式化并输出
        //System.out.println("百分数：" + nt.format(percent));
        return nt.format(percent);
    }

    /**
     * 查找某个单词在段落中出现次数的方法
     * @param str
     * @return
     */
    public static int serachWord(String str,String key) {
        //记录查找次数
        int count = 0;
        //记录每次查找的下标位置,初始化
        int index = 0;
        //定义循环,如果index的位置不是-1,就一值查找
        while((index = str.indexOf(key,index))!=-1){

            //每循环一次就要明确下一次查找的位置
            index = index+key.length();
            //每查找一次计数器自增
            count ++;
        }
        return count;
    }

    /**
     * 生成随机数
     * @param passLength
     * @param type
     * @return
     */
    public static String getCode(int passLength, int type) {
        StringBuffer buffer = null;
        StringBuffer sb = new StringBuffer();
        Random r = new Random();
        r.setSeed(new Date().getTime());//使用单个 long 种子设置此随机数生成器的种子
        switch (type) {//这里有4中不同的情况
            case 0:
                buffer = new StringBuffer("0123456789");
                break;
            case 1:
                buffer = new StringBuffer("abcdefghijklmnopqrstuvwxyz");
                break;
            case 2:
                buffer = new StringBuffer("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
                break;
            case 3:
                buffer = new StringBuffer("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
                break;
            case 4:
                String s = UUID.randomUUID().toString();//生成一个32位数字(不包括"-")的唯一标识数
                //使用substring分割其中的"-";
                sb.append(s.substring(0, 8) + s.substring(9, 13) + s.substring(14, 18) + s.substring(19, 23) + s.substring(24));
            case 5:
                buffer = new StringBuffer("123");
                break;
        }

        if (type != 4) {  //当数字不等于4时,随机数的长度passLength,nextInt(n)表示: 0<=nextInt(n)<n
            int range = buffer.length();
            for (int i = 0; i < passLength; ++i) {
                sb.append(buffer.charAt(r.nextInt(range)));//使用charAt()方法返回某一个随机出来的字符，然后添加到sb字符串变量里去
            }
        }
        return sb.toString();
    }


    public static void main(String[] args) {

        //第一个数字代表你需要多少位随机数字，第二位‘0、1、2、3’分别代表生成全数字的、生成的全小写字母的随机数、生成的全大写字母的随机数、生成的字母与数字混合的随机数
		/*System.out.println("生成一个8位的全数字的随机数是：" + getCode(8, 0));
		System.out.println("生成一个10位的全小写字母的随机数是：" + getCode(10, 1));
		System.out.println("生成一个12位的全大写字母的随机数是：" + getCode(12, 2));
		System.out.println("生成一个14位的字母与数字混合的随机数是：" + getCode(14, 3));
		//有唯一标识，可用于生成数据库表的主键(只能生成32位)
		System.out.println("生成的一个32位的有唯一标识的随机数是：" + getCode(0,4));*/
        System.out.println("生成1-3随机数是：" + getCode(1,5));
    }
}
